package com.cnap.db.mapper;

import com.cnap.db.entity.StrategyPO;
import com.cnap.model.schedule.ClusterInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 策略mapper
 *
 * @author xc
 **/
@Mapper
@Component
public interface StrategyMapper {


    /**
     * 插入策略信息
     *
     * @param strategyPO 策略信息
     * @return 结果
     */
    int insertStrategy(@Param("strategy") StrategyPO strategyPO);

    /**
     * 根据服务id和类型查询策略
     *
     * @param serviceId 服务id
     * @param type      类型
     * @return 策略
     */
    StrategyPO selectStrategyByServiceIdAndType(@Param("serviceId") String serviceId, @Param("type") String type);

    /**
     * 根据服务id查询虚机扩缩容策略
     *
     * @param serviceId 服务id
     * @return 策略
     */
    StrategyPO selectVmScaleByServiceId(@Param("serviceId") String serviceId);

    /**
     * 根据服务id查询扩缩容策略
     *
     * @param serviceId 服务id
     * @return 结果
     */
    List<StrategyPO> selectScaleStrategysByServiceId(@Param("serviceId") String serviceId);


    /**
     * 根据微服务id删除策略信息
     *
     * @param microServiceId 微服务id
     * @return 结果
     */
    int deleteStrategyBySvcId(@Param("svcId") String microServiceId);

    /**
     * 根据类型和服务id删除策略信息
     *
     * @param microServiceId 服务id
     * @param type           类型
     * @return 结果
     */
    int deleteStrategyBySvcIdAndType(@Param("svcId") String microServiceId, @Param("type") String type);

    /**
     * 更新策略
     *
     * @param strategyPO 策略
     * @return 结果
     */
    int updateStrategy(@Param("strategy") StrategyPO strategyPO);

    /**
     * 根据id删除策略
     *
     * @param id id
     * @return 结果
     */
    int deleteStrategyById(@Param("id") String id);

    /**
     * 根据id查询策略
     *
     * @param id 策略id
     * @return 结果
     */
    StrategyPO selectStrategyById(@Param("id") String id);

    /**
     * 根据微服务id更新集群信息
     *
     * @param svcId           微服务id
     * @param clusterInfoList 集群信息
     * @return 结果
     */
    int updateClusterInfoBySvcId(@Param("svcId") String svcId, @Param("clusterInfo") List<ClusterInfo> clusterInfoList);
}
